
package org.nudt.jCloud.example.basic;

import org.jgrapht.*;
import org.jgrapht.graph.*;


/**
 * A simple introduction to using JGraphT.
 *
 * @author Barak Naveh
 * @since Jul 27, 2003
 */
public final class HelloJGraphT
{
    

    private HelloJGraphT()
    {
    } // ensure non-instantiability.

    

    /**
     * The starting point for the demo.
     *
     * @param args ignored.
     */
    public static void main(String [] args)
    {
        UndirectedGraph<String, DefaultEdge> stringGraph = createStringGraph();

        // note undirected edges are printed as: {&lt;v1&gt;,&lt;v2&gt;}
        System.out.println(stringGraph.toString());

        // create a graph based on URL objects
        //DirectedGraph<URL, DefaultEdge> hrefGraph = createHrefGraph();

        // note directed edges are printed as: (&lt;v1&gt;,&lt;v2&gt;)
        //System.out.println(hrefGraph.toString());
        
        DefaultDirectedWeightedGraph<Double, DefaultWeightedEdge> wDAG = createWDAG();
        
        System.out.println(wDAG.toString());
        System.out.println(wDAG.incomingEdgesOf(3.0));
        System.out.println(wDAG.getEdge(3.0, 3.0));
    }

    private static DefaultDirectedWeightedGraph<Double, DefaultWeightedEdge> createWDAG(){
    	DefaultDirectedWeightedGraph<Double, DefaultWeightedEdge> g =
                new DefaultDirectedWeightedGraph<Double, DefaultWeightedEdge>(DefaultWeightedEdge.class);

    	double amazon = 1.0;
        double yahoo = 2.0;
        double ebay = 3.0;

        // add the vertices
        g.addVertex(amazon);
        g.addVertex(yahoo);
        g.addVertex(ebay);

        // add edges to create linking structure
       g.setEdgeWeight(g.addEdge(yahoo, amazon), 1.0);
       g.addEdge(yahoo, ebay);
       g.setEdgeWeight(g.getEdge(yahoo, ebay), 2.0);

       return g;
    }

    /**
     * Craete a toy graph based on String objects.
     *
     * @return a graph based on String objects.
     */
    private static UndirectedGraph<String, DefaultEdge> createStringGraph()
    {
        UndirectedGraph<String, DefaultEdge> g =
            new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

        String v1 = "v1";
        String v2 = "v2";
        String v3 = "v3";
        String v4 = "v4";

        // add the vertices
        g.addVertex(v1);
        g.addVertex(v2);
        g.addVertex(v3);
        g.addVertex(v4);

        // add edges to create a circuit
        g.addEdge(v1, v2);
        g.addEdge(v2, v3);
        g.addEdge(v3, v4);
        g.addEdge(v4, v1);

        return g;
    }
}
